//
//  Created by dongqiangliu on 18/01/16.
//  Copyright © 2018年 roobo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>

@protocol RBVideoRenderer;
@protocol RBLiveObserver;

typedef void (*RBLogCallback)(const char* logStr);
typedef int (*RBAuthCallback)(const char* acc, const char* pwd);

@interface RBLiveClient : NSObject

// 初始化Client
+ (BOOL)initGlobal;

/**
 设置log
 @param level => RBLiveTypes=>RBLogLevel
 */
+ (void)setLogLevel:(int)level;

// log回调
+ (void)setLogCallback:(RBLogCallback)callback;

//userAuth 回调
+ (void)setAuthCallback:(RBAuthCallback)callback;

// 获取摄像头
+ (int)getCameraCount;

/**
 * index 0 为前置摄像头, index 1 为后置摄像头
 */
+ (BOOL)setCameraDevice:(int)cameraIndex;

/**
  设置设备工作模式mode=> RBLiveTypes=>MODE
 */
- (void)setWorkMode:(int)mode;

// 设置服务器地址
- (void)setServerAddress:(NSString*)url;

// 设置设备ID
- (void)setClientId:(NSString*)clientId;

/**
 设置用户ID 和password
 @param account userId
 @param password
 */
- (void)setUserAuth:(NSString*)account
           password:(NSString*)password;

// 设置观察者
- (void)setObserver:(id<RBLiveObserver>)observer;

// 视频采集编码设置:
- (void)setVideoFormat:(int)width
                height:(int)height
             framerate:(int)framerate;

/**
 * bitrate:kbps
 */
- (void)setVideoBitrate:(int)bitrate;

/**
 请求观看视频的分辨率
 摄像头编码设置2种,640_480/1280_720
 */
- (void)setRemoteVideoSize:(int)width
                    height:(int)height;

// 视频预览设置
- (void)setPreviewRenderer:(id<RBVideoRenderer>)renderer;

/**
  设置设备播放渲染view
 @param sid ~(int)0
 @param renderer RBEAGLVideoView(连接摄像头)、断开摄像头传入nil
 */
- (void)setVideoRenderer:(uint32_t)sid
                  render:(id<RBVideoRenderer>)renderer;

//单双向视频控制，是否发送和接受音频或视频设置
/**
 * 发送指本端需要采集和发送声⾳音或视频由对⽅方接收并播放
 * 接收指本端需要接收并播放对⽅方的声⾳音或视频
 * enable为YES，进入视频对讲或双向视频模式
 * 双向视频设置需要本端设置setEnableVideoSend为true，且对端设置setEnableVideoPlay为true
 * server端只允许一个client处于双向模式，如果server busy,则client会受到回调通知- (void)OnEvent:(int)type code1:(int)code1 code2:(uint32_t)code2;
 */
- (void)setEnableAudioSend:(BOOL)enable;
- (void)setEnableAudioPlay:(BOOL)enable;
- (void)setEnableVideoSend:(BOOL)enable;
- (void)setEnableVideoPlay:(BOOL)enable;

// 视频硬编解码设置
- (void)SetEnableHwEncode:(BOOL)enable;
- (void)SetEnableHwDecode:(BOOL)enable;

- (void)SetMute:(BOOL)mute;

- (void)StopCallMode;

// 设备切换摄像头
- (void)switchCamera;

/**
 开始录制视频
 @param path 视频地址
 */
- (void)startRecord:(NSString*)path;

// 结束视频录制
- (void)stopRecord;

// 设备摄像头启动
- (void)start;

// 设备摄像头关闭
- (void)stop;

- (id)init;

- (void)dealloc;

@end
